package me.qingy.zookeeper.api_curator;

import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;

/**
 * @author qingy
 * @date 2020-10-03
 */
public class Connection {
    public static void main(String[] args) {
        /*
         * session重连策略
         * - new RetryOneTime(3000)
         *      三秒后重连一次，只重连一次
         * - new RetryNTimes(3,3000)
         *      每三秒重连一次，重连三次
         * - new RetryUntilElapsed(1000,3000)
         *      每三秒重连一次，总等待时间超过10秒后停止重连
         * - new ExponentialBackoffRetry(1000,3)
         *      重试间隔会越来越长
         *      公式：baseSleepTimeMs * Math.max(1,random.nextInt(1 << (retryCount + 1)))
         */
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);

        // 创建连接对象
        CuratorFramework client= CuratorFrameworkFactory.builder()
                // IP地址端口号
                .connectString("localhost:2181,localhost:2182,localhost:2183")
                // 会话超时时间
                .sessionTimeoutMs(5000)
                // 重连机制
                .retryPolicy(retryPolicy)
                // 命名空间
                .namespace("create")
                // 构建连接对象
                .build();
        // 打开连接
        client.start();
        System.out.println(client.getState());
        // 关闭连接
        client.close();
    }
}
